package com.ftg.learn.chapter03.business.entity;

import java.util.Arrays;

/**
 * 用户信息封装类
 * // 线性表 ： 数组自动扩容 实现
 * 分层

 * entity 数据库
   service 业务
   main
    Scanner
 * @author 布衣
 */
public class UserEntity {

    /**
     * 面向开发的 6 个原则  开闭原则
     */
    private String[] users;

    public String[] getUsers(){
        return users;
    }

    //默认的数组长度
    private final int default_capacity = 10;
    private int size;

    //判断有多少个用户
    public int getUserNum() {
        return size >>> 2;
    }

    //构造方法
    public UserEntity() {
        users = new String[default_capacity];
    }

    private void extendArray(){
        if(size == users.length){
            //扩容
            String[] newUser = new String[users.length + 12];
            //GC : 垃圾回收机制

            //jvm 你用过哪种GC , 你调试过GC 优化过jvm（11飞升神界）

            //什么叫可达算法 (标识出被访问的对象这些是可达的，不可回收)  根可达
            //确认内存为垃圾以后是马上回收吗？
            for(int i = 0 ;i < users.length;i++){
                newUser[i] = users[i];
            }
            users = newUser;

            // 类的加载流程 ？
            // int a =9;
        }
    }

    //尾插入方法
    public boolean addUser(String username, String password) {
        extendArray();
        users[size++] = username;
        //密码应该加密
        users[size++] = password;
        return true;
    }

    //头扩容  尾扩容
    public boolean addUserWithHead(String username,String password){
        extendArray();
        if(size != 0){
            //将现有信息后移两位
            for(int i = size - 1;i>-1;i--){
                users[i+2] = users[i];
            }
            System.out.println("--->"+Arrays.toString(users));
        }
        users[0] = username;
        //密码应该加密
        users[1] = password;
        size += 2;
        return true;
    }
}
